"""
题目：给定单链表头节点和位置（从0开始），返回该位置节点的值，若位置无效则返回 None。
"""


class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


def get_val_at_position(head, pos):
    """获取链表指定位置pos的节点值，pos从0开始，无效返回None"""
    # 处理空链表或位置小于0的情况
    if not head or pos < 0:
        return None
    current = head
    current_pos = 0
    # 遍历到指定位置，或到链表末尾
    while current and current_pos < pos:
        current = current.next
        current_pos += 1
    # 若current非空，说明位置有效，返回其值；否则返回None
    return current.val if current else None


def create_linked_list(arr):
    if not arr:
        return None
    head = ListNode(arr[0])
    current = head
    for val in arr[1:]:
        current.next = ListNode(val)
        current = current.next
    return head


def traverse_linked_list(head):
    result = []
    current = head
    while current:
        result.append(current.val)
        current = current.next
    return result


# 测试
if __name__ == "__main__":
    # 测试1：有效位置（pos=2）
    head1 = create_linked_list([10, 20, 30, 40])
    print(get_val_at_position(head1, 2))  # 输出: 30

    # 测试2：位置为0（头节点）
    head2 = create_linked_list([10, 20, 30])
    print(get_val_at_position(head2, 0))  # 输出: 10

    # 测试3：无效位置（pos=5，链表长度4）
    head3 = create_linked_list([10, 20, 30, 40])
    print(get_val_at_position(head3, 5))  # 输出: None

    # 测试4：空链表
    head4 = create_linked_list([])
    print(get_val_at_position(head4, 0))  # 输出: None